package com.quyunshuo.module.home.activity.stat.chart;

import android.graphics.Color;
import android.graphics.Typeface;
import android.util.Log;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;

import java.util.ArrayList;

public class BarChartDataHelper {

    private final static String TAG = "BarChartDataHelper";

    public static void setupChart(BarChart chart,
                                  ArrayList<BarEntry> values,
                                  ArrayList<Integer> colors,
                                  float max,
                                  float min,
                                  boolean scrollToLastData) {
        try {
            // =========================1. 计算Y轴最大值 - 将最大值扩大25%（除以4再乘以5），然后向上取整============================ 关键代码
            int ceil = (int) Math.ceil(max ); //柱子不会顶到图表顶部，留出一点空白区域

            // 2. 确保Y轴最大值是5的倍数（便于刻度显示）
//            if (ceil % 5 != 0) {
//                ceil = ceil + 5 - ceil % 5; // 例如：17 → 17 + (5 - 2) = 20
//            }

            // 3. 配置左侧Y轴范围
            chart.getAxisLeft().setAxisMaximum(ceil); // 设置Y轴最大值 意思就是比如哪几最高是7.5，那么他就会显示到8，这里我们设置了5的倍数，也就是8，那么图标就是10.
            chart.getAxisLeft().setAxisMinimum(0);    // 设置Y轴最小值从0开始  默认是你最小值是多少就从多少开始，我们可以设置为0

            // 4. 配置X轴范围（确保至少显示6.5个单位）
            // 使用Math.max保证当数据点少于7个时，X轴也能显示足够的空间
            // todo 注意，这里涉及柱子随着数据量而改变宽度。不设置这个，问题就会出现。
            chart.getXAxis().setAxisMaximum(Math.max(6.5f, values.size() - 0.5f));// 设置整个X轴显示的范围终点​​ （相当于给图表划定右边界）。
            Log.d(TAG, "setupBloodSugarChart: "+ values.size() );
            // 5. 设置可见区域最多显示7个数据点（用于滚动查看）
            chart.setVisibleXRangeMaximum(7f);
            //============================================================================================================= 关键代码


            // 6. 清除图表原有数据
            chart.clear();

            // 7. 创建柱状图数据集
            BarDataSet barDataSet = new BarDataSet(values, ""); // 数据集（无标签）
            barDataSet.setVisible(true);           // 确保数据集可见
            barDataSet.setDrawValues(true);        // 显示柱状图上的数值
            barDataSet.setDrawIcons(false);        // 禁用图标显示
            barDataSet.setValueTextSize(12f);      // 数值文本大小
            barDataSet.setValueTypeface(Typeface.DEFAULT_BOLD); // 数值文本字体（粗体）
            barDataSet.setValueTextColor(Color.parseColor("#A7ADB6")); // 数值文本颜色（浅灰色）
            barDataSet.setValueFormatter(new BarChartValueFormatter()); // 自定义数值格式
            barDataSet.setColors(colors);          // 设置每个柱子的颜色
            barDataSet.setHighlightEnabled(false); // 禁用点击高亮效果

            // 8. 将数据集添加到数据集合
            ArrayList<IBarDataSet> arrayList = new ArrayList<>();
            arrayList.add(barDataSet);

            // 9. 创建柱状图数据对象
            BarData barData = new BarData(arrayList);
            barData.setBarWidth(0.6f); // 设置柱子宽度（占可用空间的60%）

            // 10. 将数据设置到图表
            chart.setData(barData);

            // 11. 如果需要滚动到最后一条数据
            if (scrollToLastData) {
                // 将视图移动到最后一个数据点
                // 参数：X轴位置，Y轴值，Y轴依赖方向
                chart.moveViewTo(values.size() - 1f, 0.0f, YAxis.AxisDependency.LEFT);
            }

        } catch (Exception ignored) {
            // 12. 异常处理（静默忽略所有异常）
            // 实际项目中建议添加日志记录或错误处理
        }
    }



}
